home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / test / regrtest.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  31KB  |  802 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.4)
  3.  
  4. '''Regression test.
  5.  
  6. This will find all modules whose name is "test_*" in the test
  7. directory, and run them.  Various command line options provide
  8. additional facilities.
  9.  
  10. Command line options:
  11.  
  12. -v: verbose    -- run tests in verbose mode with output to stdout
  13. -q: quiet      -- don\'t print anything except if a test fails
  14. -g: generate   -- write the output file for a test instead of comparing it
  15. -x: exclude    -- arguments are tests to *exclude*
  16. -s: single     -- run only a single test (see below)
  17. -r: random     -- randomize test execution order
  18. -f: fromfile   -- read names of tests to run from a file (see below)
  19. -l: findleaks  -- if GC is available detect tests that leak memory
  20. -u: use        -- specify which special resource intensive tests to run
  21. -h: help       -- print this text and exit
  22. -t: threshold  -- call gc.set_threshold(N)
  23. -T: coverage   -- turn on code coverage using the trace module
  24. -D: coverdir   -- Directory where coverage files are put
  25. -N: nocoverdir -- Put coverage files alongside modules
  26. -L: runleaks   -- run the leaks(1) command just before exit
  27. -R: huntrleaks -- search for reference leaks (needs debug build, v. slow)
  28.  
  29. If non-option arguments are present, they are names for tests to run,
  30. unless -x is given, in which case they are names for tests not to run.
  31. If no test names are given, all tests are run.
  32.  
  33. -v is incompatible with -g and does not compare test output files.
  34.  
  35. -T turns on code coverage tracing with the trace module.
  36.  
  37. -D specifies the directory where coverage files are put.
  38.  
  39. -N Put coverage files alongside modules.
  40.  
  41. -s means to run only a single test and exit.  This is useful when
  42. doing memory analysis on the Python interpreter (which tend to consume
  43. too many resources to run the full regression test non-stop).  The
  44. file /tmp/pynexttest is read to find the next test to run.  If this
  45. file is missing, the first test_*.py file in testdir or on the command
  46. line is used.  (actually tempfile.gettempdir() is used instead of
  47. /tmp).
  48.  
  49. -f reads the names of tests from the file given as f\'s argument, one
  50. or more test names per line.  Whitespace is ignored.  Blank lines and
  51. lines beginning with \'#\' are ignored.  This is especially useful for
  52. whittling down failures involving interactions among tests.
  53.  
  54. -L causes the leaks(1) command to be run just before exit if it exists.
  55. leaks(1) is available on Mac OS X and presumably on some other
  56. FreeBSD-derived systems.
  57.  
  58. -R runs each test several times and examines sys.gettotalrefcount() to
  59. see if the test appears to be leaking references.  The argument should
  60. be of the form stab:run:fname where \'stab\' is the number of times the
  61. test is run to let gettotalrefcount settle down, \'run\' is the number
  62. of times further it is run and \'fname\' is the name of the file the
  63. reports are written to.  These parameters all have defaults (5, 4 and
  64. "reflog.txt" respectively), so the minimal invocation is \'-R ::\'.
  65.  
  66. -u is used to specify which special resource intensive tests to run,
  67. such as those requiring large file support or network connectivity.
  68. The argument is a comma-separated list of words indicating the
  69. resources to test.  Currently only the following are defined:
  70.  
  71.     all -       Enable all special resources.
  72.  
  73.     audio -     Tests that use the audio device.  (There are known
  74.                 cases of broken audio drivers that can crash Python or
  75.                 even the Linux kernel.)
  76.  
  77.     curses -    Tests that use curses and will modify the terminal\'s
  78.                 state and output modes.
  79.  
  80.     largefile - It is okay to run some test that may create huge
  81.                 files.  These tests can take a long time and may
  82.                 consume >2GB of disk space temporarily.
  83.  
  84.     network -   It is okay to run tests that use external network
  85.                 resource, e.g. testing SSL support for sockets.
  86.  
  87.     bsddb -     It is okay to run the bsddb testsuite, which takes
  88.                 a long time to complete.
  89.  
  90.     decimal -   Test the decimal module against a large suite that
  91.                 verifies compliance with standards.
  92.  
  93.     compiler -  Test the compiler package by compiling all the source
  94.                 in the standard library and test suite.  This takes
  95.                 a long time.
  96.  
  97.     subprocess  Run all tests for the subprocess module.
  98.  
  99. To enable all resources except one, use \'-uall,-<resource>\'.  For
  100. example, to run all the tests except for the bsddb tests, give the
  101. option \'-uall,-bsddb\'.
  102. '''
  103. import os
  104. import sys
  105. import getopt
  106. import random
  107. import warnings
  108. import sre
  109. import cStringIO
  110. import traceback
  111. warnings.filterwarnings('ignore', 'hex/oct constants', FutureWarning, '.*test.test_grammar$')
  112. if sys.maxint > 2147483647:
  113.     warnings.filterwarnings('ignore', 'hex/oct constants', FutureWarning, '<string>')
  114.  
  115. if sys.platform == 'darwin':
  116.     
  117.     try:
  118.         import resource
  119.     except ImportError:
  120.         pass
  121.  
  122.     (soft, hard) = resource.getrlimit(resource.RLIMIT_STACK)
  123.     newsoft = min(hard, max(soft, 1024 * 2048))
  124.     resource.setrlimit(resource.RLIMIT_STACK, (newsoft, hard))
  125.  
  126. from test import test_support
  127. RESOURCE_NAMES = ('audio', 'curses', 'largefile', 'network', 'bsddb', 'decimal', 'compiler', 'subprocess')
  128.  
  129. def usage(code, msg = ''):
  130.     print __doc__
  131.     if msg:
  132.         print msg
  133.     
  134.     sys.exit(code)
  135.  
  136.  
  137. def main(tests = None, testdir = None, verbose = 0, quiet = False, generate = False, exclude = False, single = False, randomize = False, fromfile = None, findleaks = False, use_resources = None, trace = False, coverdir = 'coverage', runleaks = False, huntrleaks = False):
  138.     """Execute a test suite.
  139.  
  140.     This also parses command-line options and modifies its behavior
  141.     accordingly.
  142.  
  143.     tests -- a list of strings containing test names (optional)
  144.     testdir -- the directory in which to look for tests (optional)
  145.  
  146.     Users other than the Python test suite will certainly want to
  147.     specify testdir; if it's omitted, the directory containing the
  148.     Python test suite is searched for.
  149.  
  150.     If the tests argument is omitted, the tests listed on the
  151.     command-line will be used.  If that's empty, too, then all *.py
  152.     files beginning with test_ will be used.
  153.  
  154.     The other default arguments (verbose, quiet, generate, exclude, single,
  155.     randomize, findleaks, use_resources, trace and coverdir) allow programmers
  156.     calling main() directly to set the values that would normally be set by
  157.     flags on the command line.
  158.     """
  159.     test_support.record_original_stdout(sys.stdout)
  160.     
  161.     try:
  162.         (opts, args) = getopt.getopt(sys.argv[1:], 'hvgqxsrf:lu:t:TD:NLR:', [
  163.             'help',
  164.             'verbose',
  165.             'quiet',
  166.             'generate',
  167.             'exclude',
  168.             'single',
  169.             'random',
  170.             'fromfile',
  171.             'findleaks',
  172.             'use=',
  173.             'threshold=',
  174.             'trace',
  175.             'coverdir=',
  176.             'nocoverdir',
  177.             'runleaks',
  178.             'huntrleaks='])
  179.     except getopt.error:
  180.         msg = None
  181.         usage(2, msg)
  182.  
  183.     if use_resources is None:
  184.         use_resources = []
  185.     
  186.     for o, a in opts:
  187.         if o in ('-h', '--help'):
  188.             usage(0)
  189.             continue
  190.         if o in ('-v', '--verbose'):
  191.             verbose += 1
  192.             continue
  193.         if o in ('-q', '--quiet'):
  194.             quiet = True
  195.             verbose = 0
  196.             continue
  197.         if o in ('-g', '--generate'):
  198.             generate = True
  199.             continue
  200.         if o in ('-x', '--exclude'):
  201.             exclude = True
  202.             continue
  203.         if o in ('-s', '--single'):
  204.             single = True
  205.             continue
  206.         if o in ('-r', '--randomize'):
  207.             randomize = True
  208.             continue
  209.         if o in ('-f', '--fromfile'):
  210.             fromfile = a
  211.             continue
  212.         if o in ('-l', '--findleaks'):
  213.             findleaks = True
  214.             continue
  215.         if o in ('-L', '--runleaks'):
  216.             runleaks = True
  217.             continue
  218.         if o in ('-t', '--threshold'):
  219.             import gc as gc
  220.             gc.set_threshold(int(a))
  221.             continue
  222.         if o in ('-T', '--coverage'):
  223.             trace = True
  224.             continue
  225.         if o in ('-D', '--coverdir'):
  226.             coverdir = os.path.join(os.getcwd(), a)
  227.             continue
  228.         None if o in ('-N', '--nocoverdir') else len(huntrleaks[2]) == 0
  229.         if o in ('-u', '--use'):
  230.             u = [ x.lower() for x in a.split(',') ]
  231.             for r in u:
  232.                 remove = False
  233.                 if r[0] == '-':
  234.                     remove = True
  235.                     r = r[1:]
  236.                 
  237.                 if r not in RESOURCE_NAMES:
  238.                     usage(1, 'Invalid -u/--use option: ' + a)
  239.                 
  240.                 if remove:
  241.                     if r in use_resources:
  242.                         use_resources.remove(r)
  243.                     
  244.                 r in use_resources
  245.                 if r not in use_resources:
  246.                     use_resources.append(r)
  247.                     continue
  248.             
  249.     
  250.     if generate and verbose:
  251.         usage(2, "-g and -v don't go together!")
  252.     
  253.     if single and fromfile:
  254.         usage(2, "-s and -f don't go together!")
  255.     
  256.     good = []
  257.     bad = []
  258.     skipped = []
  259.     resource_denieds = []
  260.     if findleaks:
  261.         
  262.         try:
  263.             import gc as gc
  264.         except ImportError:
  265.             print 'No GC available, disabling findleaks.'
  266.             findleaks = False
  267.  
  268.         found_garbage = []
  269.     
  270.     if single:
  271.         gettempdir = gettempdir
  272.         import tempfile
  273.         filename = os.path.join(gettempdir(), 'pynexttest')
  274.         
  275.         try:
  276.             fp = open(filename, 'r')
  277.             next = fp.read().strip()
  278.             tests = [
  279.                 next]
  280.             fp.close()
  281.         except IOError:
  282.             pass
  283.         except:
  284.             None<EXCEPTION MATCH>IOError
  285.         
  286.  
  287.     None<EXCEPTION MATCH>IOError
  288.     if fromfile:
  289.         tests = []
  290.         fp = open(fromfile)
  291.         for line in fp:
  292.             guts = line.split()
  293.             if guts and not guts[0].startswith('#'):
  294.                 tests.extend(guts)
  295.                 continue
  296.         
  297.         fp.close()
  298.     
  299.     if args:
  300.         args = map(removepy, args)
  301.     
  302.     if tests:
  303.         tests = map(removepy, tests)
  304.     
  305.     stdtests = STDTESTS[:]
  306.     nottests = NOTTESTS[:]
  307.     if exclude:
  308.         for arg in args:
  309.             if arg in stdtests:
  310.                 stdtests.remove(arg)
  311.                 continue
  312.         
  313.         nottests[:0] = args
  314.         args = []
  315.     
  316.     if not tests and args:
  317.         pass
  318.     tests = findtests(testdir, stdtests, nottests)
  319.     if single:
  320.         tests = tests[:1]
  321.     
  322.     if randomize:
  323.         random.shuffle(tests)
  324.     
  325.     if trace:
  326.         import trace
  327.         tracer = trace.Trace(ignoredirs = [
  328.             sys.prefix,
  329.             sys.exec_prefix], trace = False, count = True)
  330.     
  331.     test_support.verbose = verbose
  332.     test_support.use_resources = use_resources
  333.     save_modules = sys.modules.keys()
  334.     for test in tests:
  335.         if not quiet:
  336.             print test
  337.             sys.stdout.flush()
  338.         
  339.         if trace:
  340.             tracer.runctx('runtest(test, generate, verbose, quiet, testdir)', globals = globals(), locals = vars())
  341.         else:
  342.             ok = runtest(test, generate, verbose, quiet, testdir, huntrleaks)
  343.             if ok > 0:
  344.                 good.append(test)
  345.             elif ok == 0:
  346.                 bad.append(test)
  347.             else:
  348.                 skipped.append(test)
  349.                 if ok == -2:
  350.                     resource_denieds.append(test)
  351.                 
  352.         if findleaks:
  353.             gc.collect()
  354.             if gc.garbage:
  355.                 print 'Warning: test created', len(gc.garbage), 'uncollectable object(s).'
  356.                 found_garbage.extend(gc.garbage)
  357.                 del gc.garbage[:]
  358.             
  359.         
  360.         for module in sys.modules.keys():
  361.             if module not in save_modules and module.startswith('test.'):
  362.                 test_support.unload(module)
  363.                 continue
  364.         
  365.     
  366.     good.sort()
  367.     bad.sort()
  368.     skipped.sort()
  369.     if good and not quiet:
  370.         if not bad and not skipped and len(good) > 1:
  371.             print 'All',
  372.         
  373.         print count(len(good), 'test'), 'OK.'
  374.         if verbose:
  375.             print "CAUTION:  stdout isn't compared in verbose mode:"
  376.             print 'a test that passes in verbose mode may fail without it.'
  377.         
  378.     
  379.     if bad:
  380.         print count(len(bad), 'test'), 'failed:'
  381.         printlist(bad)
  382.     
  383.     if skipped and not quiet:
  384.         print count(len(skipped), 'test'), 'skipped:'
  385.         printlist(skipped)
  386.         e = _ExpectedSkips()
  387.         plat = sys.platform
  388.         if e.isvalid():
  389.             surprise = set(skipped) - e.getexpected() - set(resource_denieds)
  390.             if surprise:
  391.                 print count(len(surprise), 'skip'), 'unexpected on', plat + ':'
  392.                 printlist(surprise)
  393.             else:
  394.                 print 'Those skips are all expected on', plat + '.'
  395.         else:
  396.             print 'Ask someone to teach regrtest.py about which tests are'
  397.             print 'expected to get skipped on', plat + '.'
  398.     
  399.     if single:
  400.         alltests = findtests(testdir, stdtests, nottests)
  401.         for i in range(len(alltests)):
  402.             if tests[0] == alltests[i]:
  403.                 if i == len(alltests) - 1:
  404.                     os.unlink(filename)
  405.                 else:
  406.                     fp = open(filename, 'w')
  407.                     fp.write(alltests[i + 1] + '\n')
  408.                     fp.close()
  409.                 break
  410.                 continue
  411.         
  412.     
  413.     if trace:
  414.         r = tracer.results()
  415.         r.write_results(show_missing = True, summary = True, coverdir = coverdir)
  416.     
  417.     if runleaks:
  418.         os.system('leaks %d' % os.getpid())
  419.     
  420.     sys.exit(len(bad) > 0)
  421.  
  422. STDTESTS = [
  423.     'test_grammar',
  424.     'test_opcodes',
  425.     'test_operations',
  426.     'test_builtin',
  427.     'test_exceptions',
  428.     'test_types']
  429. NOTTESTS = [
  430.     'test_support',
  431.     'test_future1',
  432.     'test_future2',
  433.     'test_future3']
  434.  
  435. def findtests(testdir = None, stdtests = STDTESTS, nottests = NOTTESTS):
  436.     '''Return a list of all applicable test modules.'''
  437.     if not testdir:
  438.         testdir = findtestdir()
  439.     
  440.     names = os.listdir(testdir)
  441.     tests = []
  442.     for name in names:
  443.         if name[:5] == 'test_' and name[-3:] == os.extsep + 'py':
  444.             modname = name[:-3]
  445.             if modname not in stdtests and modname not in nottests:
  446.                 tests.append(modname)
  447.             
  448.         modname not in nottests
  449.     
  450.     tests.sort()
  451.     return stdtests + tests
  452.  
  453.  
  454. def runtest(test, generate, verbose, quiet, testdir = None, huntrleaks = False):
  455.     """Run a single test.
  456.     test -- the name of the test
  457.     generate -- if true, generate output, instead of running the test
  458.     and comparing it to a previously created output file
  459.     verbose -- if true, print more messages
  460.     quiet -- if true, don't print 'skipped' messages (probably redundant)
  461.     testdir -- test directory
  462.     """
  463.     test_support.unload(test)
  464.     if not testdir:
  465.         testdir = findtestdir()
  466.     
  467.     outputdir = os.path.join(testdir, 'output')
  468.     outputfile = os.path.join(outputdir, test)
  469.     if verbose:
  470.         cfp = None
  471.     else:
  472.         cfp = cStringIO.StringIO()
  473.     if huntrleaks:
  474.         refrep = open(huntrleaks[2], 'a')
  475.     
  476.     
  477.     try:
  478.         save_stdout = sys.stdout
  479.         
  480.         try:
  481.             if cfp:
  482.                 sys.stdout = cfp
  483.                 print test
  484.             
  485.             if test.startswith('test.'):
  486.                 abstest = test
  487.             else:
  488.                 abstest = 'test.' + test
  489.             the_package = __import__(abstest, globals(), locals(), [])
  490.             the_module = getattr(the_package, test)
  491.             indirect_test = getattr(the_module, 'test_main', None)
  492.             if indirect_test is not None:
  493.                 indirect_test()
  494.             
  495.             if huntrleaks:
  496.                 import copy_reg
  497.                 fs = warnings.filters[:]
  498.                 ps = copy_reg.dispatch_table.copy()
  499.                 pic = sys.path_importer_cache.copy()
  500.                 import gc
  501.                 
  502.                 def cleanup():
  503.                     import _strptime as _strptime
  504.                     import urlparse as urlparse
  505.                     import warnings as warnings
  506.                     import dircache as dircache
  507.                     _path_created = _path_created
  508.                     import distutils.dir_util
  509.                     _path_created.clear()
  510.                     warnings.filters[:] = fs
  511.                     gc.collect()
  512.                     sre.purge()
  513.                     _strptime._regex_cache.clear()
  514.                     urlparse.clear_cache()
  515.                     copy_reg.dispatch_table.clear()
  516.                     copy_reg.dispatch_table.update(ps)
  517.                     sys.path_importer_cache.clear()
  518.                     sys.path_importer_cache.update(pic)
  519.                     dircache.reset()
  520.  
  521.                 if indirect_test:
  522.                     
  523.                     def run_the_test():
  524.                         indirect_test()
  525.  
  526.                 else:
  527.                     
  528.                     def run_the_test():
  529.                         reload(the_module)
  530.  
  531.                 deltas = []
  532.                 repcount = huntrleaks[0] + huntrleaks[1]
  533.                 print >>sys.stderr, 'beginning', repcount, 'repetitions'
  534.                 print >>sys.stderr, '1234567890' * (repcount // 10 + 1)[:repcount]
  535.                 for i in range(repcount):
  536.                     rc = sys.gettotalrefcount()
  537.                     run_the_test()
  538.                     sys.stderr.write('.')
  539.                     cleanup()
  540.                     deltas.append(sys.gettotalrefcount() - rc - 2)
  541.                 
  542.                 print >>sys.stderr
  543.                 if max(map(abs, deltas[-huntrleaks[1]:])) > 0:
  544.                     print >>sys.stderr, test, 'leaked', deltas[-huntrleaks[1]:], 'references'
  545.                     print >>refrep, test, 'leaked', deltas[-huntrleaks[1]:], 'references'
  546.                 
  547.         finally:
  548.             sys.stdout = save_stdout
  549.  
  550.     except test_support.ResourceDenied:
  551.         msg = None
  552.         if not quiet:
  553.             print test, 'skipped --', msg
  554.             sys.stdout.flush()
  555.         
  556.         return -2
  557.     except (ImportError, test_support.TestSkipped):
  558.         msg = None
  559.         if not quiet:
  560.             print test, 'skipped --', msg
  561.             sys.stdout.flush()
  562.         
  563.         return -1
  564.     except KeyboardInterrupt:
  565.         raise 
  566.     except test_support.TestFailed:
  567.         msg = None
  568.         print 'test', test, 'failed --', msg
  569.         sys.stdout.flush()
  570.         return 0
  571.     except:
  572.         (type, value) = sys.exc_info()[:2]
  573.         print 'test', test, 'crashed --', str(type) + ':', value
  574.         sys.stdout.flush()
  575.         if verbose:
  576.             traceback.print_exc(file = sys.stdout)
  577.             sys.stdout.flush()
  578.         
  579.         return 0
  580.  
  581.     if not cfp:
  582.         return 1
  583.     
  584.     output = cfp.getvalue()
  585.     if generate:
  586.         if output == test + '\n':
  587.             if os.path.exists(outputfile):
  588.                 print 'output file', outputfile, 'is no longer needed; consider removing it'
  589.             else:
  590.                 return 1
  591.         
  592.         fp = open(outputfile, 'w')
  593.         fp.write(output)
  594.         fp.close()
  595.         return 1
  596.     
  597.     if os.path.exists(outputfile):
  598.         fp = open(outputfile, 'r')
  599.         expected = fp.read()
  600.         fp.close()
  601.     else:
  602.         expected = test + '\n'
  603.     if output == expected or huntrleaks:
  604.         return 1
  605.     
  606.     print 'test', test, 'produced unexpected output:'
  607.     sys.stdout.flush()
  608.     reportdiff(expected, output)
  609.     sys.stdout.flush()
  610.     return 0
  611.  
  612.  
  613. def reportdiff(expected, output):
  614.     import difflib as difflib
  615.     print '*' * 70
  616.     a = expected.splitlines(1)
  617.     b = output.splitlines(1)
  618.     sm = difflib.SequenceMatcher(a = a, b = b)
  619.     tuples = sm.get_opcodes()
  620.     
  621.     def pair(x0, x1):
  622.         x0 += 1
  623.         if x0 >= x1:
  624.             return 'line ' + str(x0)
  625.         else:
  626.             return 'lines %d-%d' % (x0, x1)
  627.  
  628.     for op, a0, a1, b0, b1 in tuples:
  629.         if op == 'equal':
  630.             continue
  631.         if op == 'delete':
  632.             print '***', pair(a0, a1), 'of expected output missing:'
  633.             for line in a[a0:a1]:
  634.                 print '-', line,
  635.             
  636.         if op == 'replace':
  637.             print '*** mismatch between', pair(a0, a1), 'of expected', 'output and', pair(b0, b1), 'of actual output:'
  638.             for line in difflib.ndiff(a[a0:a1], b[b0:b1]):
  639.                 print line,
  640.             
  641.         if op == 'insert':
  642.             print '***', pair(b0, b1), "of actual output doesn't appear", 'in expected output after line', str(a1) + ':'
  643.             for line in b[b0:b1]:
  644.                 print '+', line,
  645.             
  646.         print 'get_opcodes() returned bad tuple?!?!', (op, a0, a1, b0, b1)
  647.     
  648.     print '*' * 70
  649.  
  650.  
  651. def findtestdir():
  652.     if __name__ == '__main__':
  653.         file = sys.argv[0]
  654.     else:
  655.         file = __file__
  656.     if not os.path.dirname(file):
  657.         pass
  658.     testdir = os.curdir
  659.     return testdir
  660.  
  661.  
  662. def removepy(name):
  663.     if name.endswith(os.extsep + 'py'):
  664.         name = name[:-3]
  665.     
  666.     return name
  667.  
  668.  
  669. def count(n, word):
  670.     if n == 1:
  671.         return '%d %s' % (n, word)
  672.     else:
  673.         return '%d %ss' % (n, word)
  674.  
  675.  
  676. def printlist(x, width = 70, indent = 4):
  677.     '''Print the elements of iterable x to stdout.
  678.  
  679.     Optional arg width (default 70) is the maximum line length.
  680.     Optional arg indent (default 4) is the number of blanks with which to
  681.     begin each line.
  682.     '''
  683.     fill = fill
  684.     import textwrap
  685.     blanks = ' ' * indent
  686.     print fill(' '.join(map(str, x)), width, initial_indent = blanks, subsequent_indent = blanks)
  687.  
  688. _expectations = {
  689.     'win32': '\n        test__locale\n        test_applesingle\n        test_al\n        test_bsddb185\n        test_bsddb3\n        test_cd\n        test_cl\n        test_commands\n        test_crypt\n        test_curses\n        test_dbm\n        test_dl\n        test_fcntl\n        test_fork1\n        test_gdbm\n        test_gl\n        test_grp\n        test_imgfile\n        test_ioctl\n        test_largefile\n        test_linuxaudiodev\n        test_mhlib\n        test_nis\n        test_openpty\n        test_ossaudiodev\n        test_poll\n        test_posix\n        test_pty\n        test_pwd\n        test_resource\n        test_signal\n        test_sunaudiodev\n        test_threadsignals\n        test_timing\n        ',
  690.     'linux2': '\n        test_al\n        test_applesingle\n        test_bsddb185\n        test_cd\n        test_cl\n        test_curses\n        test_dl\n        test_gl\n        test_imgfile\n        test_largefile\n        test_linuxaudiodev\n        test_nis\n        test_ntpath\n        test_ossaudiodev\n        test_sunaudiodev\n        ',
  691.     'mac': '\n        test_al\n        test_atexit\n        test_bsddb\n        test_bsddb185\n        test_bsddb3\n        test_bz2\n        test_cd\n        test_cl\n        test_commands\n        test_crypt\n        test_curses\n        test_dbm\n        test_dl\n        test_fcntl\n        test_fork1\n        test_gl\n        test_grp\n        test_ioctl\n        test_imgfile\n        test_largefile\n        test_linuxaudiodev\n        test_locale\n        test_mmap\n        test_nis\n        test_ntpath\n        test_openpty\n        test_ossaudiodev\n        test_poll\n        test_popen\n        test_popen2\n        test_posix\n        test_pty\n        test_pwd\n        test_resource\n        test_signal\n        test_sunaudiodev\n        test_sundry\n        test_tarfile\n        test_timing\n        ',
  692.     'unixware7': '\n        test_al\n        test_applesingle\n        test_bsddb\n        test_bsddb185\n        test_cd\n        test_cl\n        test_dl\n        test_gl\n        test_imgfile\n        test_largefile\n        test_linuxaudiodev\n        test_minidom\n        test_nis\n        test_ntpath\n        test_openpty\n        test_pyexpat\n        test_sax\n        test_sunaudiodev\n        test_sundry\n        ',
  693.     'openunix8': '\n        test_al\n        test_applesingle\n        test_bsddb\n        test_bsddb185\n        test_cd\n        test_cl\n        test_dl\n        test_gl\n        test_imgfile\n        test_largefile\n        test_linuxaudiodev\n        test_minidom\n        test_nis\n        test_ntpath\n        test_openpty\n        test_pyexpat\n        test_sax\n        test_sunaudiodev\n        test_sundry\n        ',
  694.     'sco_sv3': '\n        test_al\n        test_applesingle\n        test_asynchat\n        test_bsddb\n        test_bsddb185\n        test_cd\n        test_cl\n        test_dl\n        test_fork1\n        test_gettext\n        test_gl\n        test_imgfile\n        test_largefile\n        test_linuxaudiodev\n        test_locale\n        test_minidom\n        test_nis\n        test_ntpath\n        test_openpty\n        test_pyexpat\n        test_queue\n        test_sax\n        test_sunaudiodev\n        test_sundry\n        test_thread\n        test_threaded_import\n        test_threadedtempfile\n        test_threading\n        ',
  695.     'riscos': '\n        test_al\n        test_applesingle\n        test_asynchat\n        test_atexit\n        test_bsddb\n        test_bsddb185\n        test_bsddb3\n        test_cd\n        test_cl\n        test_commands\n        test_crypt\n        test_dbm\n        test_dl\n        test_fcntl\n        test_fork1\n        test_gdbm\n        test_gl\n        test_grp\n        test_imgfile\n        test_largefile\n        test_linuxaudiodev\n        test_locale\n        test_mmap\n        test_nis\n        test_ntpath\n        test_openpty\n        test_poll\n        test_popen2\n        test_pty\n        test_pwd\n        test_strop\n        test_sunaudiodev\n        test_sundry\n        test_thread\n        test_threaded_import\n        test_threadedtempfile\n        test_threading\n        test_timing\n        ',
  696.     'darwin': '\n        test__locale\n        test_al\n        test_bsddb\n        test_bsddb3\n        test_cd\n        test_cl\n        test_curses\n        test_dl\n        test_gdbm\n        test_gl\n        test_imgfile\n        test_largefile\n        test_linuxaudiodev\n        test_locale\n        test_minidom\n        test_nis\n        test_ntpath\n        test_ossaudiodev\n        test_poll\n        test_sunaudiodev\n        ',
  697.     'sunos5': '\n        test_al\n        test_applesingle\n        test_bsddb\n        test_bsddb185\n        test_cd\n        test_cl\n        test_curses\n        test_dbm\n        test_gdbm\n        test_gl\n        test_gzip\n        test_imgfile\n        test_linuxaudiodev\n        test_openpty\n        test_zipfile\n        test_zlib\n        ',
  698.     'hp-ux11': '\n        test_al\n        test_applesingle\n        test_bsddb\n        test_bsddb185\n        test_cd\n        test_cl\n        test_curses\n        test_dl\n        test_gdbm\n        test_gl\n        test_gzip\n        test_imgfile\n        test_largefile\n        test_linuxaudiodev\n        test_locale\n        test_minidom\n        test_nis\n        test_ntpath\n        test_openpty\n        test_pyexpat\n        test_sax\n        test_sunaudiodev\n        test_zipfile\n        test_zlib\n        ',
  699.     'atheos': '\n        test_al\n        test_applesingle\n        test_bsddb185\n        test_cd\n        test_cl\n        test_curses\n        test_dl\n        test_gdbm\n        test_gl\n        test_imgfile\n        test_largefile\n        test_linuxaudiodev\n        test_locale\n        test_mhlib\n        test_mmap\n        test_nis\n        test_poll\n        test_popen2\n        test_resource\n        test_sunaudiodev\n        ',
  700.     'cygwin': '\n        test_al\n        test_applesingle\n        test_bsddb185\n        test_bsddb3\n        test_cd\n        test_cl\n        test_curses\n        test_dbm\n        test_gl\n        test_imgfile\n        test_ioctl\n        test_largefile\n        test_linuxaudiodev\n        test_locale\n        test_nis\n        test_ossaudiodev\n        test_socketserver\n        test_sunaudiodev\n        ',
  701.     'os2emx': '\n        test_al\n        test_applesingle\n        test_audioop\n        test_bsddb185\n        test_bsddb3\n        test_cd\n        test_cl\n        test_commands\n        test_curses\n        test_dl\n        test_gl\n        test_imgfile\n        test_largefile\n        test_linuxaudiodev\n        test_mhlib\n        test_mmap\n        test_nis\n        test_openpty\n        test_ossaudiodev\n        test_pty\n        test_resource\n        test_signal\n        test_sunaudiodev\n        ',
  702.     'freebsd4': '\n        test_aepack\n        test_al\n        test_applesingle\n        test_bsddb\n        test_bsddb3\n        test_cd\n        test_cl\n        test_gdbm\n        test_gl\n        test_imgfile\n        test_linuxaudiodev\n        test_locale\n        test_macfs\n        test_macostools\n        test_nis\n        test_normalization\n        test_ossaudiodev\n        test_pep277\n        test_plistlib\n        test_pty\n        test_scriptpackages\n        test_socket_ssl\n        test_socketserver\n        test_sunaudiodev\n        test_tcl\n        test_timeout\n        test_unicode_file\n        test_urllibnet\n        test_winreg\n        test_winsound\n        ',
  703.     'aix5': '\n        test_aepack\n        test_al\n        test_applesingle\n        test_bsddb\n        test_bsddb185\n        test_bsddb3\n        test_bz2\n        test_cd\n        test_cl\n        test_dl\n        test_gdbm\n        test_gl\n        test_gzip\n        test_imgfile\n        test_linuxaudiodev\n        test_macfs\n        test_macostools\n        test_nis\n        test_ossaudiodev\n        test_sunaudiodev\n        test_tcl\n        test_winreg\n        test_winsound\n        test_zipimport\n        test_zlib\n        ' }
  704. _expectations['freebsd5'] = _expectations['freebsd4']
  705. _expectations['freebsd6'] = _expectations['freebsd4']
  706.  
  707. class _ExpectedSkips:
  708.     
  709.     def __init__(self):
  710.         import os.path as os
  711.         test_normalization = test_normalization
  712.         import test
  713.         test_socket_ssl = test_socket_ssl
  714.         import test
  715.         test_timeout = test_timeout
  716.         import test
  717.         test_codecmaps_cn = test_codecmaps_cn
  718.         test_codecmaps_jp = test_codecmaps_jp
  719.         import test
  720.         test_codecmaps_kr = test_codecmaps_kr
  721.         test_codecmaps_tw = test_codecmaps_tw
  722.         import test
  723.         test_codecmaps_hk = test_codecmaps_hk
  724.         import test
  725.         self.valid = False
  726.         if sys.platform in _expectations:
  727.             s = _expectations[sys.platform]
  728.             self.expected = set(s.split())
  729.             if not os.path.supports_unicode_filenames:
  730.                 self.expected.add('test_pep277')
  731.             
  732.             if test_normalization.skip_expected:
  733.                 self.expected.add('test_normalization')
  734.             
  735.             if test_socket_ssl.skip_expected:
  736.                 self.expected.add('test_socket_ssl')
  737.             
  738.             if test_timeout.skip_expected:
  739.                 self.expected.add('test_timeout')
  740.             
  741.             for cc in ('cn', 'jp', 'kr', 'tw', 'hk'):
  742.                 if eval('test_codecmaps_' + cc).skip_expected:
  743.                     self.expected.add('test_codecmaps_' + cc)
  744.                     continue
  745.             
  746.             if sys.maxint == 0x7FFFFFFFFFFFFFFFL:
  747.                 self.expected.add('test_rgbimg')
  748.                 self.expected.add('test_imageop')
  749.             
  750.             if sys.platform not in ('mac', 'darwin'):
  751.                 MAC_ONLY = [
  752.                     'test_macostools',
  753.                     'test_macfs',
  754.                     'test_aepack',
  755.                     'test_plistlib',
  756.                     'test_scriptpackages']
  757.                 for skip in MAC_ONLY:
  758.                     self.expected.add(skip)
  759.                 
  760.             
  761.             if sys.platform != 'win32':
  762.                 WIN_ONLY = [
  763.                     'test_unicode_file',
  764.                     'test_winreg',
  765.                     'test_winsound']
  766.                 for skip in WIN_ONLY:
  767.                     self.expected.add(skip)
  768.                 
  769.             
  770.             self.valid = True
  771.         
  772.  
  773.     
  774.     def isvalid(self):
  775.         '''Return true iff _ExpectedSkips knows about the current platform.'''
  776.         return self.valid
  777.  
  778.     
  779.     def getexpected(self):
  780.         '''Return set of test names we expect to skip on current platform.
  781.  
  782.         self.isvalid() must be true.
  783.         '''
  784.         if not self.isvalid():
  785.             raise AssertionError
  786.         return self.expected
  787.  
  788.  
  789. if __name__ == '__main__':
  790.     mydir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0])))
  791.     i = pathlen = len(sys.path)
  792.     while i >= 0:
  793.         i -= 1
  794.         if os.path.abspath(os.path.normpath(sys.path[i])) == mydir:
  795.             del sys.path[i]
  796.         
  797.     if len(sys.path) == pathlen:
  798.         print 'Could not find %r in sys.path to remove it' % mydir
  799.     
  800.     main()
  801.  
  802.